/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Cuchu
 */
@Stateless
public class RecensioneEsternaFacade extends AbstractFacade<RecensioneEsterna> implements RecensioneEsternaFacadeLocal {
    
    
    @PersistenceContext(unitName = "EnterpriseApplication12-13-ejbPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public RecensioneEsternaFacade() {
        super(RecensioneEsterna.class);
    }
    /**
     * Cerca la RecensioneEsterna nel Database
     *
     * @param r RecensioneEsterna da cercare
     * @return true se la RecensioneEsterna e' presente nel Database, false altrimenti
     */
    @Override
    public boolean esistente(RecensioneEsterna r) {
        String s= "select re from RecensioneEsterna re where re.url=?1 ";
        Query q=em.createQuery(s).setParameter(1, r.getUrl());
        return ! (q.getResultList().isEmpty());
    }
    
     /**
     * Cerca la RecensioneEsterna con uno specifico url nel Database
     *
     * @param url l'url dal quale viene fatta la RecensioneEsterna
     * @return RecensioneEsterna la RecensioneEsterna con il specifico url, null altrimenti
     */
    @Override
    public RecensioneEsterna find(Object url){
        
        String s= "select re from RecensioneEsterna re where re.url=?1 ";
        Query q=em.createQuery(s).setParameter(1, url);
        if (q.getResultList().isEmpty()) return null;
        return  (RecensioneEsterna)q.getSingleResult();
    }
    /**
     * Cerca la RecensioneEsterna con uno specifico id nel Database
     *
     * @param id l'identificativo della RecensioneEsterna da cercare
     * @return RecensioneEsterna la RecensioneEsterna con il specifico id, null altrimenti
     */
    @Override
    public RecensioneEsterna find(long id) {
        String s= "select re from RecensioneEsterna re where re.id=?1 ";
        Query q=em.createQuery(s).setParameter(1, id);
        if (q.getResultList().isEmpty()) return null;
        return  (RecensioneEsterna)q.getSingleResult();
    }
    /**
     * Ricerca le RecensioneEsterne il cui identificativo del videogame matcha con l'identificativo del parametro Videogame v nel Database
     *
     * @param v Videogame di ricerca
     * @return List<RecensioneEsterna> lista delle RecensioneEsterne che soddisfano la ricerca, altrimenti restituisce una lista vuota 
     */
    @Override
    public List<RecensioneEsterna> findForVideogame(Videogame v) {
        String s= "select re.* from RecensioneEsterna re,RECENSIONEESTERNA_VIDEOGAME rv where re.id=rv.RECENSIONEESTERNA_ID AND rv.VIDEOGIOCHI_ID=?1";
        Query q=em.createNativeQuery(s,RecensioneEsterna.class).setParameter(1, v.getId());
        return (List<RecensioneEsterna>)q.getResultList();
    }
     
}